using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DataManagementTools._Package._SceneLayers
{
    /// <summary>
    /// <para>Create Integrated Mesh Scene Layer Package</para>
    /// <para>Creates a scene layer package from OpenSceneGraph binary (OSGB) data.</para>
    /// <para>根据 OpenSceneGraph 二进制 （OSGB） 数据创建场景图层包。</para>
    /// </summary>    
    [DisplayName("Create Integrated Mesh Scene Layer Package")]
    public class CreateIntegratedMeshSceneLayerPackage : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public CreateIntegratedMeshSceneLayerPackage()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_dataset">
        /// <para>Input Dataset</para>
        /// <para>The OSGB format files, or folders containing OSGB format files, that will be imported into the integrated mesh scene layer package. This parameter allows a selection of multiple OSGB format files or a selection of multiple folders containing OSGB format files.</para>
        /// <para>OSGB 格式文件或包含 OSGB 格式文件的文件夹，这些文件将导入到集成网格场景图层包中。此参数允许选择多个 OSGB 格式文件或选择包含 OSGB 格式文件的多个文件夹。</para>
        /// </param>
        /// <param name="_out_slpk">
        /// <para>Output Scene Layer Package</para>
        /// <para>The integrated mesh scene layer package that will be created.</para>
        /// <para>将要创建的集成网格场景图层包。</para>
        /// </param>
        public CreateIntegratedMeshSceneLayerPackage(List<object> _in_dataset, object _out_slpk)
        {
            this._in_dataset = _in_dataset;
            this._out_slpk = _out_slpk;
        }
        public override string ToolboxName => "Data Management Tools";

        public override string ToolName => "Create Integrated Mesh Scene Layer Package";

        public override string CallName => "management.CreateIntegratedMeshSceneLayerPackage";

        public override List<string> AcceptEnvironments => ["scratchWorkspace", "workspace"];

        public override object[] ParameterInfo => [_in_dataset, _out_slpk, _anchor_point, _file_suffix.GetGPValue(), _out_coor_system, _max_texture_size, _texture_optimization.GetGPValue()];

        /// <summary>
        /// <para>Input Dataset</para>
        /// <para>The OSGB format files, or folders containing OSGB format files, that will be imported into the integrated mesh scene layer package. This parameter allows a selection of multiple OSGB format files or a selection of multiple folders containing OSGB format files.</para>
        /// <para>OSGB 格式文件或包含 OSGB 格式文件的文件夹，这些文件将导入到集成网格场景图层包中。此参数允许选择多个 OSGB 格式文件或选择包含 OSGB 格式文件的多个文件夹。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public List<object> _in_dataset { get; set; }


        /// <summary>
        /// <para>Output Scene Layer Package</para>
        /// <para>The integrated mesh scene layer package that will be created.</para>
        /// <para>将要创建的集成网格场景图层包。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Scene Layer Package")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_slpk { get; set; }


        /// <summary>
        /// <para>Anchor Point</para>
        /// <para>The point feature or .3mx, .xml, or .wld3 file that will be used to position the center of the OSGB model. If there are multiple points in the feature class, only the first one will be used to georeference the data.</para>
        /// <para>将用于定位 OSGB 模型中心的点要素或 .3mx、.xml 或 .wld3 文件。如果要素类中有多个点，则仅使用第一个点对数据进行地理配准。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Anchor Point")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _anchor_point { get; set; } = null;


        /// <summary>
        /// <para>File Suffix</para>
        /// <para><xdoc>
        ///   <para>Specifies the files that will be processed for the input dataset.</para>
        ///   <bulletList>
        ///     <bullet_item>All supported files—All binary files, regardless of their extension, will be processed to determine if they are in the OSGB format.</bullet_item><para/>
        ///     <bullet_item>Files with *.osgb extension—Only files with the .osgb extension will be processed.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将为输入数据集处理的文件。</para>
        ///   <bulletList>
        ///     <bullet_item>所有支持的文件 - 将处理所有二进制文件，无论其扩展名如何，以确定它们是否为 OSGB 格式。</bullet_item><para/>
        ///     <bullet_item>扩展名为 *.osgb 的文件—仅处理扩展名为 .osgb 的文件。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("File Suffix")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _file_suffix_value _file_suffix { get; set; } = _file_suffix_value._osgb;

        public enum _file_suffix_value
        {
            /// <summary>
            /// <para>Files with *.osgb extension</para>
            /// <para>Files with *.osgb extension—Only files with the .osgb extension will be processed.</para>
            /// <para>扩展名为 *.osgb 的文件—仅处理扩展名为 .osgb 的文件。</para>
            /// </summary>
            [Description("Files with *.osgb extension")]
            [GPEnumValue("osgb")]
            _osgb,

            /// <summary>
            /// <para>All supported files</para>
            /// <para>All supported files—All binary files, regardless of their extension, will be processed to determine if they are in the OSGB format.</para>
            /// <para>所有支持的文件 - 将处理所有二进制文件，无论其扩展名如何，以确定它们是否为 OSGB 格式。</para>
            /// </summary>
            [Description("All supported files")]
            [GPEnumValue("*")]
            value1,

        }

        /// <summary>
        /// <para>Output Coordinate System</para>
        /// <para><xdoc>
        ///   <para>The coordinate system of the output scene layer package. It can be any projected or custom coordinate system. Supported geographic coordinate systems include WGS 1984 and China Geodetic Coordinate System 2000. WGS 1984 and EGM96 Geoid are the default horizontal and vertical coordinate systems, respectively. The coordinate system can be specified in any of the following ways:
        ///   <bulletList>
        ///     <bullet_item>Specify the path to a .prj file.  </bullet_item><para/>
        ///     <bullet_item>Reference a dataset with the desired coordinate system.  </bullet_item><para/>
        ///     <bullet_item>Use an arcpy.SpatialReference object.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>输出场景图层包的坐标系。它可以是任何投影坐标系或自定义坐标系。支持的地理坐标系包括 WGS 1984 和中国大地坐标系 2000。WGS 1984 和 EGM96 大地水准面分别是默认的水平坐标系和垂直坐标系。坐标系可以通过以下任一方式指定：
        ///   <bulletList>
        ///     <bullet_item>指定 .prj 文件的路径。</bullet_item><para/>
        ///     <bullet_item>使用所需坐标系引用数据集。</bullet_item><para/>
        ///     <bullet_item>使用 arcpy。SpatialReference 对象。 </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Coordinate System")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _out_coor_system { get; set; } = null;


        /// <summary>
        /// <para>Maximum Texture Size</para>
        /// <para>The maximum texture size in pixels for each scene layer node.</para>
        /// <para>每个场景图层节点的最大纹理大小（以像素为单位）。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Maximum Texture Size")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public long? _max_texture_size { get; set; } = null;


        /// <summary>
        /// <para>Texture Optimization</para>
        /// <para><xdoc>
        ///   <para>Specifies the textures that will be optimized according to the target platform where the scene layer package is used. Desktop includes Windows, Linux, and Mac platforms.</para>
        ///   <bulletList>
        ///     <bullet_item>Desktop—Texture formats will be optimized for use in desktop and web platforms. Texture formats will be JPEG and DXT. This is the default.</bullet_item><para/>
        ///     <bullet_item>None—Textures formats will be optimized for use in a desktop platform. The texture format will be JPEG.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定将根据使用场景图层包的目标平台进行优化的纹理。桌面包括 Windows、Linux 和 Mac 平台。</para>
        ///   <bulletList>
        ///     <bullet_item>桌面 - 纹理格式将进行优化，以便在桌面和 Web 平台中使用。纹理格式为 JPEG 和 DXT。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>无 （None） - 纹理格式将进行优化，以便在桌面平台中使用。纹理格式将为 JPEG。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Texture Optimization")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _texture_optimization_value _texture_optimization { get; set; } = _texture_optimization_value._Desktop;

        public enum _texture_optimization_value
        {
            /// <summary>
            /// <para>Desktop</para>
            /// <para>Desktop—Texture formats will be optimized for use in desktop and web platforms. Texture formats will be JPEG and DXT. This is the default.</para>
            /// <para>桌面 - 纹理格式将进行优化，以便在桌面和 Web 平台中使用。纹理格式为 JPEG 和 DXT。这是默认设置。</para>
            /// </summary>
            [Description("Desktop")]
            [GPEnumValue("Desktop")]
            _Desktop,

            /// <summary>
            /// <para>None</para>
            /// <para>None—Textures formats will be optimized for use in a desktop platform. The texture format will be JPEG.</para>
            /// <para>无 （None） - 纹理格式将进行优化，以便在桌面平台中使用。纹理格式将为 JPEG。</para>
            /// </summary>
            [Description("None")]
            [GPEnumValue("None")]
            _None,

        }

        public CreateIntegratedMeshSceneLayerPackage SetEnv(object scratchWorkspace = null, object workspace = null)
        {
            base.SetEnv(scratchWorkspace: scratchWorkspace, workspace: workspace);
            return this;
        }

    }

}